package com.dd.ms.auth.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dd.ms.auth.pojo.DO.RoleDO;
import com.dd.ms.auth.pojo.DO.UserRolesRelDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author liuxianmeng
 * @CreateTime 2025/7/9 12:14
 * @Description 角色 & 用户 关联操作
 */
@Mapper
public interface UserRolesRelMapper extends BaseMapper<UserRolesRelDO> {

    /**
     * 为用户分配角色
     *
     * @param params 必须包含userId和roleId
     */
    void addUserRoleRel(@Param("params") Map<String, Object> params);

    List<RoleDO> getRolesByUserId(@Param("userId") Long userId);

    /**
     * 批量为用户分配角色
     *
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     */
    void batchAddUserRoles(
            @Param("userId") Long userId,
            @Param("roleIds") List<Long> roleIds
    );

    /**
     * 移除用户的特定角色
     *
     * @param params 必须包含userId和roleId
     */
    void removeUserRoleRel(@Param("params") Map<String, Object> params);

    /**
     * 清空用户所有角色
     *
     * @param userId 用户ID
     */
    void clearUserRoles(@Param("userId") Long userId);

    /**
     * 判断用户是否拥有指定角色
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 存在返回true
     */
    Boolean hasRole(@Param("userId") Long userId, @Param("roleId") Long roleId);
}
